﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data.SqlClient;
using System.Configuration;
using System.Drawing;

namespace ivv.relatorios
{
    public partial class relatorioComparativo : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {
                SqlConnection conexaoNovaSelect = new SqlConnection(ConfigurationManager.AppSettings["baseDadosNova"]);
                conexaoNovaSelect.Open();

                string selectAno = "select distinct anoIvv FROM ivv order by anoIvv desc";

                SqlCommand cmd = new SqlCommand(selectAno, conexaoNovaSelect);
                SqlDataReader dr = cmd.ExecuteReader();

                ListItem comeco = new ListItem();

                comeco.Text = "Selecione um ano";
                comeco.Value = "nulo";

                lstAno.Items.Add(comeco);

                int cont = 0;

                if (dr.HasRows)
                {
                    while (dr.Read())
                    {
                        ListItem dados = new ListItem();

                        dados.Text = dr["anoIvv"].ToString();
                        dados.Value = cont.ToString();

                        lstAno.Items.Add(dados);

                        cont++;
                    }
                }

                dr.Close();

                conexaoNovaSelect.Close();
            }
        }

        protected void lstAno_SelectedIndexChanged(object sender, EventArgs e)
        {
            lstMes.Items.Clear();

            ListItem comeco = new ListItem();

            comeco.Text = "Selecione um mês";
            comeco.Value = "nulo";

            lstMes.Items.Add(comeco);

            for (int i = 1; i < 13; i++)
            {
                ListItem dados = new ListItem();

                dados.Text = pegarMes(i);
                dados.Value = i.ToString();

                lstMes.Items.Add(dados);
            }
        }

        public string pegarMes(int mes)
        {
            string textoMes = "";

            switch (mes)
            {
                case 1: textoMes = "Janeiro";
                    break;
                case 2: textoMes = "Fevereiro";
                    break;
                case 3: textoMes = "Março";
                    break;
                case 4: textoMes = "Abril";
                    break;
                case 5: textoMes = "Maio";
                    break;
                case 6: textoMes = "Junho";
                    break;
                case 7: textoMes = "Julho";
                    break;
                case 8: textoMes = "Agosto";
                    break;
                case 9: textoMes = "Setembro";
                    break;
                case 10: textoMes = "Outubro";
                    break;
                case 11: textoMes = "Novembro";
                    break;
                default: textoMes = "Dezembro";
                    break;
            }
            return textoMes;
        }

        protected void btnGerar_Click(object sender, EventArgs e)
        {
            if (lstAno.SelectedValue != "nulo")
            {
                if (lstMes.SelectedValue != "nulo")
                {
                    carregarDados(Convert.ToInt16(lstAno.SelectedItem.Text), Convert.ToInt16(lstAno.SelectedItem.Text) - 1, lstMes.SelectedValue, (Convert.ToInt16(lstMes.SelectedValue) - 1).ToString());

                    Panel1.Visible = true;
                }
                else
                {
                    //mensagem java script
                    string literalcc = "<script language=JavaScript>mensagem('Informe o mês');</script>";
                    Panel2.Controls.Add(new LiteralControl(literalcc));
                    lstMes.Focus();
                }
            }
            else
            {
                //mensagem java script
                string literalcc = "<script language=JavaScript>mensagem('Informe o ano');</script>";
                Panel2.Controls.Add(new LiteralControl(literalcc));
                lstAno.Focus();
            }
        }

        void carregarDados(int ano, int anoAnterior, string mes, string mesAnterior)
        {
            if (mesAnterior != "1" && mesAnterior != "2" && mesAnterior != "3" && mesAnterior != "4" && mesAnterior != "5" &&
                mesAnterior != "6" && mesAnterior != "7" && mesAnterior != "8" && mesAnterior != "9" && mesAnterior != "10" && mesAnterior != "11")
            {
                mesAnterior = "12";
                ano = anoAnterior;
            }

            if (mes.ToString().Length == 1)
            {
                mes = "0" + mes;
            }
            if (mesAnterior.ToString().Length == 1)
            {
                mesAnterior = "0" + mesAnterior;
            }

            SqlConnection sqlc = new SqlConnection(ConfigurationManager.AppSettings["baseDados"]);
            sqlc.Open();

            string select = "SELECT \n\n";

            select += "SUM(CONVERT(numeric, quantidadeLancamentoIVV)) as lancamento,  \n";
            select += "SUM(CONVERT(numeric, quantidadeOfertasIvv)) as ofertas, \n";
            select += "SUM(CONVERT(numeric, quantidadeLancamentoVendaIvv)) as lancamentoVenda,  \n";
            select += "SUM(CONVERT(numeric, quantidadeVendaIvv)) as venda, \n\n";

            select += "(select SUM(CONVERT(numeric, i.quantidadeLancamentoIVV)) as qo from ivv i where i.mesIvv = '" + mesAnterior + "' and i.anoIvv = '" + ano + "' and i.tipoTransporte = 1) as lancamentoMesAnteior, \n";
            select += "(select SUM(CONVERT(numeric, i.quantidadeOfertasIvv)) as qo from ivv i where i.mesIvv = '" + mesAnterior + "' and i.anoIvv = '" + ano + "' and i.tipoTransporte = 1) as ofertaMesAnteior, \n";
            select += "(select SUM(CONVERT(numeric, i.quantidadeLancamentoVendaIvv)) as qo from ivv i where i.mesIvv = '" + mesAnterior + "' and i.anoIvv = '" + ano + "' and i.tipoTransporte = 1) as vendaLancamentoMesAnteior, \n";
            select += "(select SUM(CONVERT(numeric, i.quantidadeVendaIvv)) as qo from ivv i where i.mesIvv = '" + mesAnterior + "' and i.anoIvv = '" + ano + "' and i.tipoTransporte = 1) as vendaMesAnteior, \n\n";

            select += "(select SUM(CONVERT(numeric, i.quantidadeLancamentoIVV)) as qo from ivv i where i.mesIvv = '" + mes + "' and i.anoIvv = '" + anoAnterior + "' and i.tipoTransporte = 1) as lancamentoAnoAnteior, \n";
            select += "(select SUM(CONVERT(numeric, i.quantidadeOfertasIvv)) as qo from ivv i where i.mesIvv = '" + mes + "' and i.anoIvv = '" + anoAnterior + "' and i.tipoTransporte = 1) as ofertaAnoAnteior, \n";
            select += "(select SUM(CONVERT(numeric, i.quantidadeLancamentoVendaIvv)) as qo from ivv i where i.mesIvv = '" + mes + "' and i.anoIvv = '" + anoAnterior + "' and i.tipoTransporte = 1) as vendaLancamentoAnoAnteior, \n";
            select += "(select SUM(CONVERT(numeric, i.quantidadeVendaIvv)) as qo from ivv i where i.mesIvv = '" + mes + "' and i.anoIvv = '" + anoAnterior + "' and i.tipoTransporte = 1) as vendaAnoAnteior, \n\n";

            select += "(select SUM(CONVERT(numeric, i.quantidadeLancamentoIVV)) as qo from ivv i where i.anoIvv = '" + lstAno.SelectedItem.Text + "' and CONVERT(numeric, i.mesIvv) BETWEEN 1 and " + mes + " and i.tipoTransporte = 1) as lancamentoSum, \n";
            select += "(select SUM(CONVERT(numeric, i.quantidadeOfertasIvv)) as qo from ivv i where i.anoIvv = '" + lstAno.SelectedItem.Text + "' and CONVERT(numeric, i.mesIvv) BETWEEN 1 and " + mes + " and i.tipoTransporte = 1) as ofertaSum, \n";
            select += "(select SUM(CONVERT(numeric, i.quantidadeLancamentoVendaIvv)) as qo from ivv i where i.anoIvv = '" + lstAno.SelectedItem.Text + "' and CONVERT(numeric, i.mesIvv) BETWEEN 1 and " + mes + " and i.tipoTransporte = 1) as vendaLancamentoSum, \n";
            select += "(select SUM(CONVERT(numeric, i.quantidadeVendaIvv)) as qo from ivv i where i.anoIvv = '" + lstAno.SelectedItem.Text + "' and CONVERT(numeric, i.mesIvv) BETWEEN 1 and " + mes + " and i.tipoTransporte = 1) as vendaSum, \n\n";

            select += "(select SUM(CONVERT(numeric, i.quantidadeLancamentoIVV)) as qo from ivv i where i.anoIvv = '" + anoAnterior + "' and CONVERT(numeric, i.mesIvv) BETWEEN 1 and " + mes + " and i.tipoTransporte = 1) as lancamentoSumAnoAnteior, \n";
            select += "(select SUM(CONVERT(numeric, i.quantidadeOfertasIvv)) as qo from ivv i where i.anoIvv = '" + anoAnterior + "' and CONVERT(numeric, i.mesIvv) BETWEEN 1 and " + mes + " and i.tipoTransporte = 1) as ofertaSumAnoAnteior, \n";
            select += "(select SUM(CONVERT(numeric, i.quantidadeLancamentoVendaIvv)) as qo from ivv i where i.anoIvv = '" + anoAnterior + "' and CONVERT(numeric, i.mesIvv) BETWEEN 1 and " + mes + " and i.tipoTransporte = 1) as vendaLancamentoSumAnoAnteior, \n";
            select += "(select SUM(CONVERT(numeric, i.quantidadeVendaIvv)) as qo from ivv i where i.anoIvv = '" + anoAnterior + "' and CONVERT(numeric, i.mesIvv) BETWEEN 1 and " + mes + " and i.tipoTransporte = 1) as vendaSumAnoAnteior \n\n";

            select += "FROM ivv where anoIvv = '" + lstAno.SelectedItem.Text + "' and mesIvv = '" + mes + "' and tipoTransporte = 1 \n";

            SqlCommand cmd = new SqlCommand(select, sqlc);
            SqlDataReader dr = cmd.ExecuteReader();

            double ofertas = 0;
            double lancamento = 0;
            double venda = 0;
            double lancamentoVenda = 0;

            double ofertaMesAnteior = 0;
            double lancamentoMesAnteior = 0;
            double vendaMesAnteior = 0;
            double vendaLancamentoMesAnteior = 0;

            double ofertaAnoAnteior = 0;
            double lancamentoAnoAnteior = 0;
            double vendaAnoAnteior = 0;
            double vendaLancamentoAnoAnteior = 0;

            double ofertaSum = 0;
            double lancamentoSum = 0;
            double vendaSum = 0;
            double vendaLancamentoSum = 0;

            double ofertaSumAnoAnteior = 0;
            double lancamentoSumAnoAnteior = 0;
            double vendaSumAnoAnteior = 0;
            double vendaLancamentoSumAnoAnteior = 0;

            double mesAtualO = 0;
            double mesAntesO = 0;
            double anoAntesO = 0;

            double mesAtualV = 0;
            double mesAntesV = 0;
            double anoAntesV = 0;

            if (dr.HasRows)
            {
                while (dr.Read())
                {
                    ofertas = validar(dr["ofertas"].ToString());
                    lancamento = validar(dr["lancamento"].ToString());
                    venda = validar(dr["venda"].ToString());
                    lancamentoVenda = validar(dr["lancamentoVenda"].ToString());

                    ofertaMesAnteior = validar(dr["ofertaMesAnteior"].ToString());
                    lancamentoMesAnteior = validar(dr["lancamentoMesAnteior"].ToString());
                    vendaMesAnteior = validar(dr["vendaMesAnteior"].ToString());
                    vendaLancamentoMesAnteior = validar(dr["vendaLancamentoMesAnteior"].ToString());

                    ofertaAnoAnteior = validar(dr["ofertaAnoAnteior"].ToString());
                    lancamentoAnoAnteior = validar(dr["lancamentoAnoAnteior"].ToString());
                    vendaAnoAnteior = validar(dr["vendaAnoAnteior"].ToString());
                    vendaLancamentoAnoAnteior = validar(dr["vendaLancamentoAnoAnteior"].ToString());

                    ofertaSum = validar(dr["ofertaSum"].ToString());
                    lancamentoSum = validar(dr["lancamentoSum"].ToString());
                    vendaSum = validar(dr["vendaSum"].ToString());
                    vendaLancamentoSum = validar(dr["vendaLancamentoSum"].ToString());

                    ofertaSumAnoAnteior = validar(dr["ofertaSumAnoAnteior"].ToString());
                    lancamentoSumAnoAnteior = validar(dr["lancamentoSumAnoAnteior"].ToString());
                    vendaSumAnoAnteior = validar(dr["vendaSumAnoAnteior"].ToString());
                    vendaLancamentoSumAnoAnteior = validar(dr["vendaLancamentoSumAnoAnteior"].ToString());

                    mesAtualO = lancamento + ofertas;
                    mesAntesO = lancamentoMesAnteior + ofertaMesAnteior;
                    anoAntesO = lancamentoAnoAnteior + ofertaAnoAnteior;

                    mesAtualV = venda + lancamentoVenda;
                    mesAntesV = vendaMesAnteior + vendaLancamentoMesAnteior;
                    anoAntesV = vendaAnoAnteior + vendaLancamentoAnoAnteior;

                    lblOfertatotalI.Text = mesAtualO.ToString();
                    lblOfertatotalII.Text = mesAntesO.ToString();
                    lblOfertatotalIII.Text = anoAntesO.ToString();

                    lblVendaTotalI.Text = mesAtualV.ToString();
                    lblVendaTotalII.Text = mesAntesV.ToString();
                    lblVendaTotalIII.Text = anoAntesV.ToString();

                    lblLancamentoI.Text = lancamento.ToString();
                    lblLancamentoII.Text = lancamentoMesAnteior.ToString();
                    lblLancamentoIII.Text = lancamentoAnoAnteior.ToString();

                    lblOfertaI.Text = ofertas.ToString();
                    lblOfertaII.Text = ofertaMesAnteior.ToString();
                    lblOfertaIII.Text = ofertaAnoAnteior.ToString();

                    lblVendaI.Text = venda.ToString();
                    lblVendaII.Text = vendaMesAnteior.ToString();
                    lblVendaIII.Text = vendaAnoAnteior.ToString();

                    lblVendaLancamentoI.Text = lancamentoVenda.ToString();
                    lblVendaLancamentoII.Text = vendaLancamentoMesAnteior.ToString();
                    lblVendaLancamentoIII.Text = vendaLancamentoAnoAnteior.ToString();

                    lblOfertaTotalMes.Text = Math.Round(((mesAtualO * 100 / mesAntesO) - 100), 1).ToString();
                    if (Convert.ToDouble(lblOfertaTotalMes.Text) < 0)
                    {
                        lblOfertaTotalMes.ForeColor = Color.Red;
                    }
                    lblOfertaTotalMesAno.Text = Math.Round(((mesAtualO * 100 / anoAntesO) - 100), 1).ToString();
                    if (Convert.ToDouble(lblOfertaTotalMesAno.Text) < 0)
                    {
                        lblOfertaTotalMesAno.ForeColor = Color.Red;
                    }
                    lblOfertaTotalMesPercAno.Text = Math.Round((((ofertaSum + lancamentoSum) * 100 / (ofertaSumAnoAnteior + lancamentoSumAnoAnteior)) - 100), 1).ToString();
                    if (Convert.ToDouble(lblOfertaTotalMesPercAno.Text) < 0)
                    {
                        lblOfertaTotalMesPercAno.ForeColor = Color.Red;
                    }

                    lblVendaTotalMes.Text = Math.Round(((mesAtualV * 100 / mesAntesV) - 100), 1).ToString();
                    if (Convert.ToDouble(lblVendaTotalMes.Text) < 0)
                    {
                        lblVendaTotalMes.ForeColor = Color.Red;
                    }
                    lblVendaTotalMesAno.Text = Math.Round(((mesAtualV * 100 / anoAntesV) - 100), 1).ToString();
                    if (Convert.ToDouble(lblVendaTotalMesAno.Text) < 0)
                    {
                        lblVendaTotalMesAno.ForeColor = Color.Red;
                    }
                    lblVendaTotalMesPercAno.Text = Math.Round((((vendaSum + vendaLancamentoSum) * 100 / (vendaSumAnoAnteior + vendaLancamentoSumAnoAnteior)) - 100), 1).ToString();
                    if (Convert.ToDouble(lblVendaTotalMesPercAno.Text) < 0)
                    {
                        lblVendaTotalMesPercAno.ForeColor = Color.Red;
                    }

                    lblOfertaMes.Text = Math.Round(((ofertas * 100 / ofertaMesAnteior) - 100), 1).ToString();
                    if (Convert.ToDouble(lblOfertaMes.Text) < 0)
                    {
                        lblOfertaMes.ForeColor = Color.Red;
                    }
                    lblOfertaMesAno.Text = Math.Round(((ofertas * 100 / ofertaAnoAnteior) - 100), 1).ToString();
                    if (Convert.ToDouble(lblOfertaMesAno.Text) < 0)
                    {
                        lblOfertaMesAno.ForeColor = Color.Red;
                    }
                    lblOfertaMesPercAno.Text = Math.Round(((ofertaSum * 100 / ofertaSumAnoAnteior) - 100), 1).ToString();
                    if (Convert.ToDouble(lblOfertaMesPercAno.Text) < 0)
                    {
                        lblOfertaMesPercAno.ForeColor = Color.Red;
                    }

                    lblLancamentoMes.Text = Math.Round(((lancamento * 100 / lancamentoMesAnteior) - 100), 1).ToString();
                    if (Convert.ToDouble(lblLancamentoMes.Text) < 0)
                    {
                        lblLancamentoMes.ForeColor = Color.Red;
                    }
                    lblLancamentoMesAno.Text = Math.Round(((lancamento * 100 / lancamentoAnoAnteior) - 100), 1).ToString();
                    if (Convert.ToDouble(lblLancamentoMesAno.Text) < 0)
                    {
                        lblLancamentoMesAno.ForeColor = Color.Red;
                    }
                    lblLancamentoMesPercAno.Text = Math.Round(((lancamentoSum * 100 / lancamentoSumAnoAnteior) - 100), 1).ToString();
                    if (Convert.ToDouble(lblLancamentoMesPercAno.Text) < 0)
                    {
                        lblLancamentoMesPercAno.ForeColor = Color.Red;
                    }

                    lblVendaLancamentoMes.Text = Math.Round(((lancamentoVenda * 100 / vendaLancamentoMesAnteior) - 100), 1).ToString();
                    if (Convert.ToDouble(lblVendaLancamentoMes.Text) < 0)
                    {
                        lblVendaLancamentoMes.ForeColor = Color.Red;
                    }
                    lblVendaLancamentoMesAno.Text = Math.Round(((lancamentoVenda * 100 / vendaLancamentoAnoAnteior) - 100), 1).ToString();
                    if (Convert.ToDouble(lblVendaLancamentoMesAno.Text) < 0)
                    {
                        lblVendaLancamentoMesAno.ForeColor = Color.Red;
                    }
                    lblVendaLancamentoMesPercAno.Text = Math.Round(((vendaLancamentoSum * 100 / vendaLancamentoSumAnoAnteior) - 100), 1).ToString();
                    if (Convert.ToDouble(lblVendaLancamentoMesPercAno.Text) < 0)
                    {
                        lblVendaLancamentoMesPercAno.ForeColor = Color.Red;
                    }

                    lblVendaMes.Text = Math.Round(((venda * 100 / vendaMesAnteior) - 100), 1).ToString();
                    if (Convert.ToDouble(lblVendaMes.Text) < 0)
                    {
                        lblVendaMes.ForeColor = Color.Red;
                    }
                    lblVendaMesAno.Text = Math.Round(((venda * 100 / vendaAnoAnteior) - 100), 1).ToString();
                    if (Convert.ToDouble(lblVendaMesAno.Text) < 0)
                    {
                        lblVendaMesAno.ForeColor = Color.Red;
                    }
                    lblVendaMesPercAno.Text = Math.Round(((vendaSum * 100 / vendaSumAnoAnteior) - 100), 1).ToString();
                    if (Convert.ToDouble(lblVendaMesPercAno.Text) < 0)
                    {
                        lblVendaMesPercAno.ForeColor = Color.Red;
                    }
                }
            }

            dr.Close();

            sqlc.Close();
        }

        double validar(string dado)
        {
            try
            {
                return Convert.ToDouble(dado);
            }
            catch
            {
                return 0;
            }
        }
    }
}
